#!/bin/bash

# Creo variables mas comodas para las rutas que vienen por parametro...
rutaAcep=$ACEPDIR;
rutaSala=$MAEDIR/salas.mae;
rutaObra=$MAEDIR/obras.mae;
rutaProc=$PROCDIR;
rutaRech=$RECHDIR;

# Comandos externos
MOVER_B="$BINDIR/Mover_B.sh"
GRABAR_L="$BINDIR/Grabar_L.sh Reservar_B I"

cantArch=0;
cantArch=$(ls $rutaAcep | grep -c . )

# Inicio el Reservar_B grabando el log...
$GRABAR_L "Inicio de Reservar_B con $cantArch archivo/os... ";

# Recorro los archivos del directorio 1 por 1
archivos=$(ls $rutaAcep | grep . ); 

for arch in $archivos; 
do 
	# Guardo en el log el archivo que proceso
	$GRABAR_L "Archivo a procesar: $arch";
	
	if [ -f $rutaProc/$arch ]
	then
		# Si esta duplicado, lo rechazo directamente
		$GRABAR_L "Se rechaza el archivo por estar DUPLICADO"
		$MOVER_B $rutaAcep/$arch $rutaRech
	else
		
		if [ -s $rutaAcep/$arch ]
		then
			# Veo si hay registros que no cumplen con lo establecido
			cantRegErroneos=$(grep -c -v '[0-9a-zA-Z]*;[0-9][0-9]/[0-9][0-9]/[0-9][0-9][0-9][0-9];[0-9][0-9]:[0-9][0-9];[^;]*;[^;]*;[0-9][0-9]*;[^;]*$' $rutaAcep/$arch)
			
			if [ $cantRegErroneos = 0 ]
			then # Si no hay erroneos, lo proceso
				
				# Agarro los datos del nombre del archivo
				id=`echo $arch | cut -f1 -d'-'`
				
				idObra=""
				nomObra=""
				idSala=""
				nomSala=""
				
				# Averiguo si quiere reservar por Obra o por Sala
				existeObra=$(grep -c '^'"$id"';.*' $rutaObra);
				existeSala=$(grep -c '^'"$id"';.*' $rutaSala);
				
				if [ $existeObra -gt 0 ]
				then
					idObra=$id
					# Voy a buscar Nombre Obra
					nomObra=$(cat $rutaObra | grep '^'"$idObra"';.*' | cut -f2 -d';')
				elif [ $existeSala -gt 0 ]
				then
					idSala=$id
					# Voy a buscar Nombre Sala
					nomSala=$(cat $rutaSala | grep '^'"$idSala"';.*' | cut -f2 -d';')
				fi
				
				correoSol=`echo $arch | cut -f2 -d'-'`
				
				disponibilidad=-1
				butacasOtorgadas=0
				regOk=0
				regNok=0
				
				# Para cada registro, lo proceso
				old_IFS=$IFS
				IFS=$'\n'
				for linea in $(cat $rutaAcep/$arch)
				do 
					# Obtengo los datos del registro
					refInt=`echo $linea | cut -f1 -d';'`
					fecha=`echo $linea | cut -f2 -d';'`
					hora=`echo $linea | cut -f3 -d';'`
					nroFila=`echo $linea | cut -f4 -d';'`
					nroButaca=`echo $linea | cut -f5 -d';'`
					cantButacas=`echo $linea | cut -f6 -d';'`
					seccion=`echo $linea | cut -f7 -d';'`
					
					fechaReserva=`echo $fecha | cut -b 7-10` # Anio
					fechaReserva=$fechaReserva`echo $fecha | cut -b 4-5` # Mes
					fechaReserva=$fechaReserva`echo $fecha | cut -b 1-2` # Dia
					fechaReserva=$fechaReserva`echo $hora | cut -b 1-2` # Hora
					horaReserva=`echo $hora | cut -b 1-2`
					fechaReserva=$fechaReserva`echo $hora | cut -b 4-5` # Minutos
					minReserva=`echo $hora | cut -b 4-5`
					caracterInterm=`echo $hora | cut -b 3`
					
					fechaActual=$(date +%Y%m%d%H%M)
					
					# Fecha minima de reserva, dentro de 2 dias
					let fechaMinima=$(date +%Y%m%d%H%M --date='+2 day')

					# Fecha maxima de reserva, hasta dentro de 30 dias
					let fechaMaxima=$(date +%Y%m%d%H%M --date='+30 day')
					
					if [ $fechaReserva -le $fechaMinima ]
					then
						# Rechazo por tardia
						echo "$refInt;$fecha;$hora;$nroFila;$nroButaca;$cantButacas;$seccion;RESERVA VENCIDA;$idSala;$idObra;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.nok
						let regNok=$regNok+1
					elif [ $fechaReserva -gt $fechaMaxima ]
					then
						# Rechazo por temprano
						echo "$refInt;$fecha;$hora;$nroFila;$nroButaca;$cantButacas;$seccion;RESERVA ANTICIPADA;$idSala;$idObra;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.nok
						let regNok=$regNok+1
					elif [[ $horaReserva -gt "23" || $minReserva -gt "59" ]]
					then
						# Rechazo por hora invalida
						echo "$refInt;$fecha;$hora;$nroFila;$nroButaca;$cantButacas;$seccion;HORA INVALIDA;$idSala;$idObra;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.nok
						let regNok=$regNok+1
					else
					
						# Me fijo si hay Combo disponible
						if [ $existeObra -gt 0 ]
						then
							# Busco combo por obra
							cantCombosDisponibles=$(grep -c '^[^;]*;'"$idObra"';'"$fecha"';'"$hora"'' $rutaProc/combos.dis)
						elif [ $existeSala -gt 0 ]
						then
							# Busco combo por obra
							cantCombosDisponibles=$(grep -c '^[^;]*;[^;]*;'"$fecha"';'"$hora"';'"$idSala"'' $rutaProc/combos.dis)
						else
							cantCombosDisponibles=0
						fi
						
						if [ $cantCombosDisponibles = 0 ]
						then
							# Rechazo por no haber disponibilidad
							echo "$refInt;$fecha;$hora;$nroFila;$nroButaca;$cantButacas;$seccion;NO EXISTE EL EVENTO SOLICITADO;$idSala;$idObra;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.nok
							let regNok=$regNok+1
						else
							
							if [ $disponibilidad -lt 0 ] # Si es la primer reserva, voy a buscar la disponibilidad al archivo combos.dis
							then
								# Aca voy a buascar la disponibilidad segun sea obra o sala!!
								if [ $existeObra -gt 0 ]
								then
									# Busco por obra
									disponibilidad=`echo $(grep '^[^;]*;'"$idObra"';'"$fecha"';'"$hora"'' $rutaProc/combos.dis) | cut -f7 -d';'`
									disponibilidadOriginal=$disponibilidad
									idCombo=`echo $(grep '^[^;]*;'"$idObra"';'"$fecha"';'"$hora"'' $rutaProc/combos.dis) | cut -f1 -d';'`
								elif [ $existeSala -gt 0 ]
								then
									# Busco por Sala
									disponibilidad=`echo $(grep '^[^;]*;[^;]*;'"$fecha"';'"$hora"';'"$idSala"'' $rutaProc/combos.dis) | cut -f7 -d';'`
									disponibilidadOriginal=$disponibilidad
									idCombo=`echo $(grep '^[^;]*;[^;]*;'"$fecha"';'"$hora"';'"$idSala"'' $rutaProc/combos.dis) | cut -f1 -d';'`
								fi							
							fi
							
							let resta=$disponibilidad-$cantButacas
							
							if [ $resta -lt 0 ] # Si al restar las butacas que quiero reservar, me da negativo, no lo puedo reservar
							then
								# Rechazo por falta de butacas
								echo "$refInt;$fecha;$hora;$nroFila;$nroButaca;$cantButacas;$seccion;FALTA DE DISPONIBILIDAD;$idSala;$idObra;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.nok
								let regNok=$regNok+1
							else
								# La reserva esta OK, lo guardo en reservas.ok
								let butacasOtorgadas=$butacasOtorgadas+$cantButacas
								let disponibilidad=$disponibilidad-$cantButacas
								echo "$idObra;$nomObra;$fecha;$hora;$idSala;$nomSala;$cantButacas;$idCombo;$refInt;$cantButacas;$correoSol;$(date +%d/%m/%Y-%H:%M);$USER" >> $rutaProc/reservas.ok
								let regOk=$regOk+1
							fi
						fi
					fi
				done
				IFS=$old_IFS
				
				# Actualizo disponibilidad si se reservo algo
				if [ $butacasOtorgadas -gt 0 ]
				then
					$(cat $rutaProc/combos.dis | grep '^'"$idCombo"'' | sed -i 's-\([^;]*;[^;]*;[^;]*;[^;]*;[^;]*;[^;]*;\)'"$disponibilidadOriginal"'\(;[^;].*$\)-\1'"$disponibilidad"'\2-' $rutaProc/combos.dis)
				fi
				
				# Muevo el archivo procesado, esta OK				
				$MOVER_B $rutaAcep/$arch $rutaProc

				# Registro en el log los Ok y No Ok
				$GRABAR_L "Registros Ok: $regOk."
				$GRABAR_L "Registros No Ok: $regNok."
				
			else
				
				# Rechazo por registros erroneos
				$GRABAR_L "Se rechaza el archivo por contener REGISTROS ERRONEOS"
				$MOVER_B $rutaAcep/$arch $rutaRech
				
			fi

		else 
			
			# Archivo vacio
			$GRABAR_L "Se rechaza el archivo por estar VACIO"
			$MOVER_B $rutaAcep/$arch $rutaRech
				
		fi
	fi
done
